package com.javabasic.algorithm.baidu_interview;

/**
 * @author mir.xiong
 * @version 1.0
 * @description
 * @see
 * @since Created by work on 2022/3/11 1:42 下午
 */
public class CustomListTest {


    public static void main(String[] args) {
         ListNode ListNode4 = new ListNode(3,null);
         ListNode ListNode3 = new ListNode(3,ListNode4);
         ListNode ListNode2 = new ListNode(2,ListNode3);
         ListNode ListNode1 = new ListNode(1, ListNode2);
         ListNode ListNode0 = new ListNode(1, ListNode1);
         ListNode result = deleteDuplicates(ListNode0);

//        ListNode ListNode6 = new ListNode(5,null);
//        ListNode ListNode5 = new ListNode(4,ListNode6);
//        ListNode ListNode4 = new ListNode(4,ListNode5);
//        ListNode ListNode3 = new ListNode(3,ListNode4);
//        ListNode ListNode2 = new ListNode(3,ListNode3);
//        ListNode ListNode1 = new ListNode(2, ListNode2);
//        ListNode ListNode0 = new ListNode(1, ListNode1);
//        ListNode result = deleteDuplicates(ListNode0);


        while (result != null) {
            System.out.println(result.value);
            result = result.next;
        }
    }

    public static ListNode  deleteDuplicates(ListNode head) {
        if (head == null) {
            return head;
        }
        ListNode preHead = new ListNode(0, null);
        int preValue = head.value;
        ListNode preHeadIndex = preHead;
        boolean flag = true;
        while (head.next != null) {
            if (head.next.value == preValue) {
                flag = false;
            } else {
                if (flag) {
                    preHeadIndex.next = head;
                    preHeadIndex = preHeadIndex.next;
                }
                flag = true;
                preValue = head.next.value;
            }
            head = head.next;
        }
        preHeadIndex.next = null;


//        while (head != null && head.next != null) {
//            if (head.value != head.next.value) {
//                if (flag) {
//                    preHeadIndex.next = head;
//                    preHeadIndex = preHeadIndex.next;
//                }
//                flag = true;
//            } else {
//                flag = false;
//            }
//            head = head.next;
//        }
//
//        if (flag) {
//            preHeadIndex.next = head;
//        } else {
//            preHeadIndex.next = null;
//        }

        return preHead.next;
    }
}

class ListNode {
    int value;
    ListNode next;

    public ListNode(int value, ListNode next) {
        this.value = value;
        this.next = next;
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }

    public ListNode getNext() {
        return next;
    }

    public void setNext(ListNode next) {
        this.next = next;
    }
}
